<?php
namespace Managers;
use Doctrine\ORM\Query;

class Category extends BaseManager{

    /**
     * @todo Треба буде винести в БД
     * @var array
     */
    public static $categories = array(
            1 => array('n'=>'Легковые автомобили','r'=>'Легковых автомобилей'),
            2 => array('n'=>'Мотоциклы','r'=>'Мотоциклов'),
            3 => array('n'=>'Водный транспорт','r'=>'Водного транспорта'),
            4 => array('n'=>'Спецтехника','r'=>'Спецтехники'),
            5 => array('n'=>'Прицепы','r'=>'Прицепов'),
            6 => array('n'=>'Грузовые автомобили','r'=>'Грузовых автомобилей'),
            7 => array('n'=>'Автобусы','r'=>'Автобусов'),
            8 => array('n'=>'Автодома','r'=>'Автодомов')
    );

    
    /**
     * Get items by specified id or ids
     * 
     * @param array|int $ids  Identificators
     * @return \Doctrine\Common\Collections\Collection
     */
    public function get($ids, $asArray = false) {
        return $this->getItems(DB::$T_CATEGORY, $ids, $asArray);
    }

    public static function getSklonenie($id){
        if(is_int($id))
            return self::$categories[$id];
    }

    public function getEnabled($asArray = false){
        $em = $this->getEntityManager();
        $items = $em->createQueryBuilder()
            ->select('partial cat.{id, name, rewrite}')
            ->from(DB::$T_CATEGORY, 'cat')
            ->where('cat.enabled = :isEnabled')
            ->orderBy('cat.ordering', 'asc')
            ->setParameters(array('isEnabled'=>1))
            ->getQuery()
            ->useQueryCache(true)
            ->useResultCache(true, 360);

       if ($asArray){
            $items = $items->getResult(Query::HYDRATE_ARRAY);
       }  else {
            $items = $items->getResult(Query::HYDRATE_OBJECT);
       }

        return $items;
    }

    public function getByName($name = '') {
        $QB = $this->_em->createQueryBuilder();
        $result = $QB->select('partial cat.{id, name, rewrite}')
                ->from(DB::$T_CATEGORY, 'cat')
                ->where('cat.enabled = :isEnabled')
                ->andWhere(
                    $QB->expr()->orx(
                        $QB->expr()->eq('cat.name', ':name'),
                        $QB->expr()->eq('cat.rewrite', ':name')
                    ))
                ->setParameter('name', $name)
                ->setParameter('isEnabled', 1)
                ->getQuery()
                ->useQueryCache(true)
                ->useResultCache(true, 360)
                ->getArrayResult();
        if(count($result))return $result[0];

    }

}